﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace prjMateriais
{
    public partial class FrmCosultaMaterial : Form
    {
        private bool firstClickFabricante;
        private bool firstClickGrupo;
        private bool firstClickFamilia;
        private int index;
        private string condicaoFamilia;
        private string condicaFabricante;
        private string condicaoGrupo;

        public FrmCosultaMaterial()
        {
            InitializeComponent();
            index = 0;
            loadGridConfig();
            initFirstClick();
        }

        private void initFirstClick()
        {
            firstClickFabricante = true;
            firstClickGrupo = true;
            firstClickFamilia = true;
        }

        private void FrmCosultaMaterial_Shown(object sender, EventArgs e)
        {
        }

        private void loadGridConfig()
        {
            updateGrid();
            renomerColuna("Código");
            renomerColuna("Nome");
            renomerColuna("Situação");
            renomerColuna("Fabricante");
            renomerColuna("Divisão Fabricante");
            renomerColuna("Tipo de Material");
            renomerColuna("Família");
            renomerColuna("Grupo");
            renomerColuna("Uni. Medida");
            renomerColuna("Estoque Mínimo");
            renomerColuna("Ativo");
            renomerColuna("Controla Validade");
        }

        public void updateGrid()
        {

            List<string> tabelas = new List<string>();
            List<string> campos = new List<string>();

            tabelas.Add(ConstTabelas.MATERIAL);
            tabelas.Add(ConstTabelas.SITUAÇAOMATERIAL);
            tabelas.Add(ConstTabelas.FABRICANTE);
            tabelas.Add(ConstTabelas.DIVISAOFABRICANTE);
            tabelas.Add(ConstTabelas.TIPOMATERIAL);
            tabelas.Add(ConstTabelas.FAMILIAMATERIAL);
            tabelas.Add(ConstTabelas.GRUPOMATERIAL);
            tabelas.Add(ConstTabelas.UNIDADEMEDIDA);


            campos.Add(ConstTabelas.MATERIAL + ".Codigo");
            campos.Add(ConstTabelas.MATERIAL + ".Nome");
            campos.Add(ConstTabelas.SITUAÇAOMATERIAL + ".Nome");
            campos.Add(ConstTabelas.FABRICANTE + ".Nome");
            campos.Add(ConstTabelas.DIVISAOFABRICANTE + ".Nome");
            campos.Add(ConstTabelas.TIPOMATERIAL + ".Nome");
            campos.Add(ConstTabelas.FAMILIAMATERIAL + ".Nome");
            campos.Add(ConstTabelas.GRUPOMATERIAL + ".Nome");
            campos.Add(ConstTabelas.UNIDADEMEDIDA + ".Nome");
            campos.Add(ConstTabelas.MATERIAL + ".EstoqueMinimo");
            campos.Add(ConstTabelas.MATERIAL + ".Situacao");
            campos.Add(ConstTabelas.MATERIAL + ".ControlaValidade");

            string condicao = getCondicaoFiltro()
                              + "(" + ConstTabelas.MATERIAL + ".CodigoSituacao = " + ConstTabelas.SITUAÇAOMATERIAL + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoFabricante = " + ConstTabelas.FABRICANTE + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoDivisaoFabricante = " + ConstTabelas.DIVISAOFABRICANTE + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoTipoMaterial = " + ConstTabelas.TIPOMATERIAL + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoFamilia = " + ConstTabelas.FAMILIAMATERIAL + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoGrupo = " + ConstTabelas.GRUPOMATERIAL + ".Codigo "
                              + " and " + ConstTabelas.MATERIAL + ".CodigoUnidadeMedida = " + ConstTabelas.UNIDADEMEDIDA + ".Codigo)";

            carregarGrid(SqlCrud.getInstance.select(tabelas,campos,condicao));
        }
        public void renomerColuna(string nomeColuna)
        {
            dtgrdvwMateriais.Columns[index].HeaderText = nomeColuna;
            index++;
        }

        public void loadCombos(string tabela, string codigo, ComboBox combo)
        {
            DataTable dados = Conexao.getInstance.executeQuery(SqlCrud.getInstance.selectAll(tabela));
            combo.DataSource = dados;
            combo.DisplayMember = "Nome";
            combo.ValueMember = codigo;
        }

      

        private string getCondicaoFiltro()
        {
            string condicao = "";

            if (condicaoFamilia != null)
            {
                condicao += (condicaFabricante != null || condicaoGrupo != null) ? condicaoFamilia + " and " : condicaoFamilia;
            }
            if (condicaFabricante != null)
            {
                condicao += (condicaoGrupo != null) ? condicaFabricante + " and " : condicaFabricante;
            }
            if (condicaoGrupo != null)
            {
                condicao += condicaoGrupo;
            }

            if (condicao != "")
            {
                return "(" + condicao + ") and ";
            }
            return condicao;
        }

        public void carregarGrid(string sql)
        {
            try
            {
                DataTable dados = Conexao.getInstance.executeQuery(sql);
                dtgrdvwMateriais.DataSource = dados;

            }
            catch { }
        }

        private void cboFamilia_Click(object sender, EventArgs e)
        {
            if (firstClickFamilia)
            {
                loadCombos(ConstTabelas.FAMILIAMATERIAL, ConstTabelas.FAMILIAMATERIAL_PK, cboFamilia);
                firstClickFamilia = false;
            }

        }

        private void cboGrupo_Click(object sender, EventArgs e)
        {
            if (firstClickGrupo)
            {
                loadCombos(ConstTabelas.GRUPOMATERIAL, ConstTabelas.GRUPOMATERIAL_PK, cboGrupo);
                firstClickGrupo = false;
            }

        }

        private void cboFabricante_SelectedIndexChanged(object sender, EventArgs e)
        {

            condicaFabricante = "CodigoFabricante = " + cboFabricante.SelectedValue;

            updateGrid();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void cboFabricante_Click(object sender, EventArgs e)
        {
            if (firstClickFabricante)
            {
                loadCombos(ConstTabelas.FABRICANTE, ConstTabelas.FABRICANTE_PK, cboFabricante);
                firstClickFabricante = false;
            }

        }

        private void cboFamilia_SelectedIndexChanged(object sender, EventArgs e)
        {

            condicaoFamilia = "CodigoFamilia = " + cboFamilia.SelectedValue;
            updateGrid();

        }

        private void cboGrupo_SelectedIndexChanged(object sender, EventArgs e)
        {
            condicaoGrupo = "CodigoGrupo = " + cboGrupo.SelectedValue;
            updateGrid();
        }

        private void btnLimparFiltro_Click(object sender, EventArgs e)
        {

            cboFabricante.DataSource = null;
            cboFamilia.DataSource = null;
            cboGrupo.DataSource = null;
            condicaFabricante = null;
            condicaoFamilia = null;
            condicaoGrupo = null;
            initFirstClick();
            updateGrid();
        }
    }
}
